Skip to content

feat(studio): collections in the sidebar, list, settings and New collection (RFC-0040 step 3) - #86

Merged
Madraka merged 1 commit into
mainfrom
feat/collections-studio
Oct 22, 2026
Merged

Madraka merged 1 commit into
mainfrom
feat/collections-studio

Conversation

@Madraka

@Madraka Madraka commented Oct 22, 2026

Copy link
Copy Markdown
Contributor

RFC-0040 / ADR-0042, step 3 of 4. Stacked on #85, which is stacked on #84.

What changes in Studio

  • Sidebar › Content: one item per collection in the registry (GET …/collections: declared, inferred from entries, and posts), with:

    • its plural name in Studio's language (unnamed posts stays "Articles");
    • its icon;
    • its entry count;
    • then Collections.

    The registry refreshes after any write to the site, its entries or its collections (onApiWrite).

  • /collections: a list template with name, address, entries and whether the collection is named. New collection opens a dialog: plural and singular name in the site's default language, a key derived from the name (immutable, which the dialog says), an icon from the closed set, and an address. The API checks for overlaps (409 path_conflict).

  • /collections/$collection: the Articles list, generalised; ArticlesPage shrank from 214 to 197 lines.

    • Category and tag columns and facets appear only when the taxonomy applies to that collection.
    • For collections other than posts, "New entry", "Search entries" and "No entries yet".
    • The collection's icon and description in the header, plus a Settings button for people with site:settings.
  • /collections/$collection/settings: a settings template with these sections:

    • Names: per site locale, plus description and icon.
    • Listing: RSS feed, sitemap, default order.
    • Categories & tags: applied through Taxonomy.collections.
    • Address: shown here, changed in Site settings › Collections, which has the redirect preview.
  • Redirects and other screens:

    • /articles redirects to /collections/posts and keeps the facets.
    • The editor stays at /articles/$entryId, since entry ids are unique and about 20 screens deep-link there; its breadcrumb now leads to the entry's collection.
    • The comments queue, the language review options and the taxonomy dialog read the registry instead of posts.

Deviations from the RFC (small)

  • The editor URL stays /articles/$entryId and does not become /collections/$collection/$entryId.
  • The address is edited in Site settings, not on the collection's settings page; the settings page links there.
  • Comments per collection stay in Comment settings.
  • The Overview still shows recent articles.

Checks

  • design:lint clean; size:check ok, with the baseline ratcheted down because ArticlesPage and SiteShell shrank.
  • Bundle budget: initial load 419.9 kB of 420 kB.
    • The 12 collection icons load lazily, so the shell does not carry them. Before that change the load was 421.7 kB.
    • Headroom is now about 100 B. The next shell feature will need to make room.
  • Studio tests: 1199/1199, including the new test/collections.test.ts.
  • i18n:
    • New lazy namespace collections and 6 core keys.
    • Drafts for 18 languages through the translate skill: AI drafts awaiting review, none marked reviewed.
    • i18n:import checks pass, 27/27.
  • design:shots at 1440 and 390 px against a copy of the local test site, with this worktree's CLI and Studio: Collections, New collection dialog, Events, Articles, Events settings. All rendered, with no sideways scroll and no console errors. The same session also checked the API end to end:
    • declaring events returned 200;
    • creating an entry in it returned 201;
    • an entry in the undeclared jobs returned 422 collection_undeclared.

Refs #71

🤖 Generated with Claude Code

…ection (RFC-0040 step 3)

The sidebar lists the registry (declared, inferred from entries, posts)
with names in Studio's language, icons (a closed set, lazy-loaded so
the first load stays in budget) and counts, then Collections. New
routes: /collections (overview + New collection dialog),
/collections/$collection (the Articles list, generalised: taxonomy
columns only where they apply) and /collections/$collection/settings
(names per locale, icon, feed, sitemap, sort, taxonomies; the address
links to Site settings). /articles redirects to /collections/posts; the
editor's crumb follows the entry's collection. Comments, language review
options and the taxonomy dialog read the registry. New lazy message
namespace "collections"; drafts for 18 languages (awaiting review).

Refs #71 (RFC-0040, ADR-0042)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Madraka <8898640+Madraka@users.noreply.github.com>
Base automatically changed from feat/collections-store to main October 22, 2026 19:55
@Madraka
Madraka merged commit a73f9db into main Oct 22, 2026
6 of 8 checks passed
@Madraka
Madraka deleted the feat/collections-studio branch October 22, 2026 20:14
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant